22 Balandžio, 2024

JAV ateivių analizė

In [1]:
from PIL import Image
from IPython.display import display
img = Image.open('alien.png')
display(img)
No description has been provided for this image

Hipotezė¶

Kadangi nagrinėjimui buvo paimtas Ian'o K. duomenų rinkinys: "Aliens in America", ataskaitos pagrindinė hipotezė bus tokia: ateiviai nekelia grėsmės Amerikos visuomenei ir ateities gerovei. Iš tokios hipotezės natūraliai išplaukia ataskaitos tikslas: nustatyti, ar ateivių buvimas Amerikoje negręsia jos piliečiams. Iš karto apibrėžkime kaip pamatuosime, ar ateiviai "nekelia grėsmės":

  1. Jų gyvenamoji vieta pritaikyta jų rūšiai, dėl to nekelia jiems streso
  2. Jų koncentracija valstijose nėra kritinė
  3. Plėšrios rūšys neminta žmonėmis
  4. Jų profesijos nedaro akivaizdžiai neigiamos įtakos individams arba visuomenei
Ir, jeigu jų veikla dabar nekenkia žmonėms arba ateityje negali turėti žmonėms kenkiančių pasekmių, tuomet pagrindinė hipotezė bus patvirtinta, o ataskaitos tikslas pasiektas.

Duomenų paėmimas iš serverio¶

Atliekami būtinieji žingsniai, kad būtų galima naudotis pasirinkto duomenų rinkinio lentelėmis čia:

In [2]:
import sqlalchemy
In [3]:
sqlalchemy.create_engine('mysql://root:**********@localhost/ian_k')
Out[3]:
Engine(mysql://root:***@localhost/ian_k)
In [4]:
%load_ext sql
In [5]:
%sql mysql://root:**********@localhost/ian_k
In [6]:
aliens = %sql select * from aliens
 * mysql://root:***@localhost/ian_k
50000 rows affected.
In [7]:
details = %sql select * from details
 * mysql://root:***@localhost/ian_k
50000 rows affected.
In [8]:
location = %sql select * from location
 * mysql://root:***@localhost/ian_k
50000 rows affected.

Pirminis duomenų tvarkymas ¶

In [9]:
import numpy as np
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
import seaborn as sns
from fuzzywuzzy import fuzz

Iškviesta duomenų rinkinio pirma lentelė

In [10]:
aliens = pd.DataFrame(aliens)
aliens.head()
Out[10]:
id first_name last_name email gender type birth_year
0 1 Tyrus Wrey twrey0@sakura.ne.jp Agender Reptile 1717
1 2 Ealasaid St Louis estlouis1@amazon.co.uk Female Flatwoods 1673
2 3 Violette Sawood vsawood2@yolasite.com Female Nordic 1675
3 4 Rowan Saintsbury rsaintsbury3@rediff.com Male Green 1731
4 5 Free Ingolotti fingolotti4@bbb.org Genderfluid Flatwoods 1763
In [11]:
aliens.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 50000 entries, 0 to 49999
Data columns (total 7 columns):
 #   Column      Non-Null Count  Dtype 
---  ------      --------------  ----- 
 0   id          50000 non-null  int64 
 1   first_name  50000 non-null  object
 2   last_name   50000 non-null  object
 3   email       50000 non-null  object
 4   gender      50000 non-null  object
 5   type        50000 non-null  object
 6   birth_year  50000 non-null  int64 
dtypes: int64(2), object(5)
memory usage: 2.7+ MB

Iškviesta duomenų rinkinio antra lentelė

In [12]:
details = pd.DataFrame(details)
details.rename(columns={'detail_id': 'id'}, inplace=True)
details.head()
Out[12]:
id favorite_food feeding_frequency aggressive
0 1 White-faced tree rat Weekly TRUE
1 2 Lizard, goanna Seldom FALSE
2 3 Indian red admiral Weekly TRUE
3 4 Bandicoot, southern brown Often FALSE
4 5 Kangaroo, red Once FALSE
In [13]:
details.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 50000 entries, 0 to 49999
Data columns (total 4 columns):
 #   Column             Non-Null Count  Dtype 
---  ------             --------------  ----- 
 0   id                 50000 non-null  int64 
 1   favorite_food      50000 non-null  object
 2   feeding_frequency  50000 non-null  object
 3   aggressive         50000 non-null  object
dtypes: int64(1), object(3)
memory usage: 1.5+ MB

Iškviesta duomenų rinkinio trečia lentelė

In [14]:
location = pd.DataFrame(location)
location.rename(columns={'loc_id': 'id'}, inplace=True)
location.head()
Out[14]:
id current_location state country occupation
0 1 Cincinnati Ohio United States Senior Cost Accountant
1 2 Bethesda Maryland United States Senior Sales Associate
2 3 Oakland California United States Registered Nurse
3 4 Richmond Virginia United States Director of Sales
4 5 Atlanta Georgia United States Administrative Officer
In [15]:
location.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 50000 entries, 0 to 49999
Data columns (total 5 columns):
 #   Column            Non-Null Count  Dtype 
---  ------            --------------  ----- 
 0   id                50000 non-null  int64 
 1   current_location  50000 non-null  object
 2   state             50000 non-null  object
 3   country           50000 non-null  object
 4   occupation        50000 non-null  object
dtypes: int64(1), object(4)
memory usage: 1.9+ MB

Iškviestos lentelės sujungtos į vieną lentelę. Tegu ji bus vadinama pagrindine.

In [16]:
alien_info = aliens.merge(details, on='id').merge(location, on='id')
alien_info.head()
Out[16]:
id first_name last_name email gender type birth_year favorite_food feeding_frequency aggressive current_location state country occupation
0 1 Tyrus Wrey twrey0@sakura.ne.jp Agender Reptile 1717 White-faced tree rat Weekly TRUE Cincinnati Ohio United States Senior Cost Accountant
1 2 Ealasaid St Louis estlouis1@amazon.co.uk Female Flatwoods 1673 Lizard, goanna Seldom FALSE Bethesda Maryland United States Senior Sales Associate
2 3 Violette Sawood vsawood2@yolasite.com Female Nordic 1675 Indian red admiral Weekly TRUE Oakland California United States Registered Nurse
3 4 Rowan Saintsbury rsaintsbury3@rediff.com Male Green 1731 Bandicoot, southern brown Often FALSE Richmond Virginia United States Director of Sales
4 5 Free Ingolotti fingolotti4@bbb.org Genderfluid Flatwoods 1763 Kangaroo, red Once FALSE Atlanta Georgia United States Administrative Officer

Sutvarkius duomenys ir gavus vieną vientisą gražią lentelę, dabar jau galima užsiimti kiekvieno iškeltos hipotezės punkto nagrinėjimu. Pradėsiu iš eilės.

1. Ar jų gyvenamoji vieta pritaikyta jų rūšiai, dėl to nekelia jiems streso?¶

Atsakymu į šį klausimą taps informacija: kur gyvena ateiviai. Galbūt paaiškės kokių nors tendencijų. Be to, platesniam atsakymui, prie "state" stulpelio galima pridėti dar ir geografines koordinates (iš modulio "Geopandas"):

In [17]:
usa = gpd.read_file('tl_2014_us_state.shx')[['NAME', 'geometry']]
usa.rename(columns={'NAME': 'state'}, inplace=True)
usa.head()
Out[17]:
state geometry
0 West Virginia POLYGON ((-81.74725 39.09538, -81.74635 39.096...
1 Florida MULTIPOLYGON (((-82.98339 24.60263, -82.98624 ...
2 Illinois POLYGON ((-91.18529 40.63780, -91.17510 40.643...
3 Minnesota POLYGON ((-96.78438 46.63050, -96.78434 46.630...
4 Maryland POLYGON ((-77.45881 39.22027, -77.45866 39.220...

Paliekamos tos eilutės, kokios valstijos, be pasikartojimų, įvardytos ateivių lentelėje "location"

In [18]:
alien_states = usa[usa['state'].isin(location['state'].unique())]
alien_states.head()
# type(alien_states)
Out[18]:
state geometry
0 West Virginia POLYGON ((-81.74725 39.09538, -81.74635 39.096...
1 Florida MULTIPOLYGON (((-82.98339 24.60263, -82.98624 ...
2 Illinois POLYGON ((-91.18529 40.63780, -91.17510 40.643...
3 Minnesota POLYGON ((-96.78438 46.63050, -96.78434 46.630...
4 Maryland POLYGON ((-77.45881 39.22027, -77.45866 39.220...

Nustatoma, kiek ateivių dabar gyvena kiekvienoje iš valstijų. (Dar pervadintas stulpelis DataFrame lentelėje)

In [19]:
# alien_population = alien_info.groupby('state')['state'].count()
alien_population = alien_info['state'].value_counts()
alien_population[:5]
Out[19]:
state
Texas         5413
California    5410
Florida       4176
New York      2690
Ohio          1851
Name: count, dtype: int64
In [20]:
alien_population = gpd.GeoDataFrame(alien_population).rename(columns={'count': 'population'}).reset_index()
alien_population.head()
Out[20]:
state population
0 Texas 5413
1 California 5410
2 Florida 4176
3 New York 2690
4 Ohio 1851

Ir kiekiai atrodo taip:

In [21]:
pd.DataFrame(alien_population).plot.bar(x='state', y='population', figsize=(12, 4), color='#844593')
plt.show()
No description has been provided for this image

Gyvenančiųjų kiekvienoje valstijoje kiekis pridedamas prie gyvenvietės ir geografinių koordinačių stulpelių:

In [22]:
alien_population_geo = alien_population.merge(alien_states, on='state')
alien_population_geo = gpd.GeoDataFrame(alien_population_geo)
alien_population_geo.head()
# type(alien_population_geo)
Out[22]:
state population geometry
0 Texas 5413 POLYGON ((-103.98018 32.00012, -103.97994 32.0...
1 California 5410 MULTIPOLYGON (((-119.63472 33.26544, -119.6363...
2 Florida 4176 MULTIPOLYGON (((-82.98339 24.60263, -82.98624 ...
3 New York 2690 MULTIPOLYGON (((-74.04657 40.68964, -74.04675 ...
4 Ohio 1851 POLYGON ((-84.80325 40.98939, -84.80324 40.991...

Dabar galima pamatyti kaip gyvenančių pasirinktoje Amerikos valstijoje ateivių kiekis atrodo žemėlapyje:

In [23]:
ax = alien_population_geo.plot(edgecolor='grey', figsize=(20, 20))
alien_population_geo.plot(ax=ax, column='population', cmap='BuPu')
plt.title('Alien population per state (the darker the more)')
plt.show()
No description has been provided for this image

Paaiškėjo keturi "traukos centrai". Įdomu nustatyti juose gyvenančių ateivių rasinę sudėtį:

In [24]:
d1 = alien_info[alien_info['state'].isin(['Texas', 'California', 'Florida', 'New York'])][['state', 'type']]
d1.head()
Out[24]:
state type
2 California Nordic
7 Florida Flatwoods
14 California Flatwoods
17 California Flatwoods
18 Texas Reptile

Ir suformuojamas aiškus atsakymas apie rasinę daugumą tuose "traukos centruose"

In [25]:
for state in d1['state'].unique():
    max_population = d1[d1['state'] == state].groupby('type')['type'].count().sort_values()
    print(f"Widest spieces in {state} is {max_population.tail(1).index[0]} ({max_population.max()})")
    # print(max_population)
Widest spieces in California is Green (1105)
Widest spieces in Florida is Flatwoods (878)
Widest spieces in Texas is Reptile (1128)
Widest spieces in New York is Nordic (583)

Išvada N1: Paaiškėjo, kad ateiviai apsigyveno 51 valstijoje ir dauguma iš jų pasirinko Teksasą, Kaliforniją, Floridą (turtingiausias pietines valstijas) ir Niujorką (kultūros centrą). Šių valstijų gyventojų ir turistų gausa, tikriausiai, padeda ateiviams likti nepastebėtiems valstybinėmis tarnybomis, o valstijų ekonominė padėtis, galimybių įvairovė ir šiltas pietinis klimatas – padeda išgyventi.

Be to, dauguma ateivių Teksase yra „reptile“ rasės (1128), Kalifornijoje: „green“ rasės (1105), Floridoje „flatwoods“ rasės (878), o Niujorke: „Nordic“ rasės (583). Matyt, jų gyvenimo vietos pasirinkimas buvo lemtas taip pat ir rasės ypatybėmis. Iš šių įžvalgų galima teigti, kad jų gyvenimo vietos pritaikytos jų rūšims, dėl ko ateiviai nepatyria streso (arba patyria jo mažiausiai), išlieka ramesni ir neturi priežasties kenkti žmonėms.

Tokiu būdu, pirmas hipotezės punktas pilnai pasitvirtino.

2. Ar jų koncentracija valstijose nėra kritinė?¶

Atsakymui į šį klausimą iškviečiamas failas su duomenimis, kiek, 2020 metais, žmonių gyveno kiekvienoje Amerikos valstijoje. Paliekami tik valstijų pavadinimų ir kiekio stulpeliai:

In [26]:
population_per_state = pd.read_csv('us_pop_by_state.csv')[['state', '2020_census']]
population_per_state.head()
Out[26]:
state 2020_census
0 California 39538223
1 Texas 29145505
2 Florida 21538187
3 New York 20201249
4 Pennsylvania 13002700

Paliktos tik tų valstijų reikšmės, kuriose apsigyveno ateiviai:

In [27]:
population_per_state = population_per_state[population_per_state['state'].isin(location['state'].unique())]
population_per_state.head()
Out[27]:
state 2020_census
0 California 39538223
1 Texas 29145505
2 Florida 21538187
3 New York 20201249
4 Pennsylvania 13002700

Reikalingos reikšmės surinktos į vieną lentelę:

In [28]:
def percentage(df):
    return round(df['population'] / df['2020_census'] * 100, 4)
In [29]:
alien_percentage = alien_population.merge(population_per_state, on='state')
alien_percentage['%_of_population'] = alien_percentage.apply(percentage, axis=1)
alien_percentage.head()
Out[29]:
state population 2020_census %_of_population
0 Texas 5413 29145505 0.0186
1 California 5410 39538223 0.0137
2 Florida 4176 21538187 0.0194
3 New York 2690 20201249 0.0133
4 Ohio 1851 11799448 0.0157

Dabar galima pamatyti koks yra santykis ateivių ir žmonių kiekvienoje valstijoje:

In [30]:
labels = ['Aliens', 'Humans']
sizes = [sum(alien_percentage['population']), sum(alien_percentage['2020_census'])]
colors = ['#4C014B', '#844593']

fig, ax = plt.subplots(figsize=(3, 3))
ax.pie(sizes, labels=labels, colors=colors, explode=[0.5, 0])
plt.show()
No description has been provided for this image

Ir koks santykis ateivių ir žmonių keturiose populiariausiose valstijose

In [31]:
labels = ['Aliens', 'Humans']
sizes = [sum(alien_percentage['population'][:4]), sum(alien_percentage['2020_census'][:4])]
colors = ['#4C014B', '#844593']

fig, ax = plt.subplots(figsize=(3, 3))
ax.pie(sizes, labels=labels, colors=colors, explode=[0.5, 0])
plt.show()
No description has been provided for this image

Išvada N2: ateivių koncentracija valstijose tikrai nėra kritinė.

Tokiu būdu, antras hipotezės punktas irgi pilnai pasitvirtino.

3. Ar plėšrios rūšys neminta žmonėmis?¶

Atsakymui į šį klausimą galima pradėti plėšrių rūšių kiekiu nustatymu:

In [32]:
labels = ['Aggressive', 'Non-agressive']
sizes = [sum(details['aggressive'] == 'TRUE'), len(details['aggressive'])]
colors = ['#844593', '#4C014B']

fig, ax = plt.subplots(figsize=(3, 3))
ax.pie(sizes, labels=labels, colors=colors)
plt.show()
No description has been provided for this image

Paaiškėjo, kad plėšrių rūšių yra mažiau, negu kitų. Be to, duomenų rinkinyje nėra plėšrūmo apibrėžimo. Ar turima omeny, kad plėšrus ateivis gali maitintis mėsa arba, kad kartais išeina į medžioklę?

Verta patikrinti ar žmogiena nėra jų mėgstamas valgis:

In [33]:
'human' in details['favorite_food'].unique()
Out[33]:
False

Išvada N3: nei viena ateivių rūšis nemėgsta maitintis žmogiena, tuomet Amerikos piliečiai gali būti ramūs.

Tokiu būdu, trečias hipotezės punktas irgi pilnai pasitvirtino.

4. Ar jų profesijos nedaro akyvaizdžiai neigiamos įtakos individams arba visuomenei?¶

Atsakymui į šį klausimą, reikia surasti, kokią įtaką (silpną ar stiprią) visuomenei padaro ateivių profesionali veikla, bet tokių duomenų iš pradžių nesuteikta. Tuomet galima pasinaudoti mašininio mokymosi metodu, atsižvelgiant į amerikiečių tikrų profesijų įtakos koeficientus, kurie reiškiasi per jų atlyginimus, darbinę patirtį ir panašiai

Pradžiai instaliuojami dar du reikalingi moduliai.

In [34]:
# !pip install fuzzywuzzy
In [35]:
# !pip install python-Levenshtein

Iš ateivių profesijų stulpelio išrenkami nesikartojančios reikšmės:

In [36]:
alien_occupation = location['occupation'].unique()
alien_occupation[:10]
Out[36]:
array(['Senior Cost Accountant', 'Senior Sales Associate',
       'Registered Nurse', 'Director of Sales', 'Administrative Officer',
       'Programmer II', 'Pharmacist', 'Recruiter', 'Design Engineer',
       'Research Associate'], dtype=object)

Patikrinta, ar tarp ateivių profesijų yra tuščių reikšmių ir pažiūrėta, kiek yra unikalių reikšmių:

In [37]:
np.nan in alien_occupation
Out[37]:
False
In [38]:
len(alien_occupation)
Out[38]:
195

Iškviesta amerikiečių tikrų profesijų lentelė, ir iš jos buvo paimti du stulpeliai: profesijos pavadinimas ir atlyginimo didis:

In [39]:
usa_professions = pd.read_csv(r'usa_professions.csv')[['PUMS Occupation', 'Average Wage (2020)']].dropna()
usa_professions.head()
Out[39]:
PUMS Occupation Average Wage (2020)
0 General & operations managers 84813.100671
1 Chief executives & legislators 156122.416454
2 Advertising & promotions managers 78689.732180
3 Marketing managers 89221.844910
4 Sales managers 105004.383049

Nustatomas maksimalus atlyginimo dydis, kad būtų surastas koeficientas, leidžiantis priskirti profesijoms įtakos skaičių (//koeficientą) nuo 1 iki 5:

In [40]:
max_salary = usa_professions['Average Wage (2020)'].max()
max_salary
Out[40]:
266984.015114905

Užrašoma aukščiau paminėto koeficiento sukūrimo funkcija:

In [41]:
def power_coefficient(df):
    return round(df['Average Wage (2020)'] / 200000 * 3.6)

Prie amerikiečių tikrų profesijų lentelės pridedamas gautų koeficientų stulpelis. O atliginimų stulpelis atmetamas.

In [42]:
usa_professions['power_coefficient'] = usa_professions.apply(power_coefficient, axis=1)
usa_professions = usa_professions[['PUMS Occupation', 'power_coefficient']]
usa_professions.head()
Out[42]:
PUMS Occupation power_coefficient
0 General & operations managers 2
1 Chief executives & legislators 3
2 Advertising & promotions managers 1
3 Marketing managers 2
4 Sales managers 2

Dabar ieškomos sutampančių (tarp amerikiečių tikrų ir ateivių profesijų) reikšmių poros, kad vėliau joms būtų galima suteikti įtakos koeficientus.

1 žingsnis: sukuriamos paminėtos profesijų poros. Kol kas kiekvienai ateivių profesijai parenkama tikra amerikiečių profesija:

In [43]:
pairs = []
for p in alien_occupation:
    for q in usa_professions['PUMS Occupation']:
        pairs.append([p, q])
pairs[:10]
Out[43]:
[['Senior Cost Accountant', 'General & operations managers'],
 ['Senior Cost Accountant', 'Chief executives & legislators'],
 ['Senior Cost Accountant', 'Advertising & promotions managers'],
 ['Senior Cost Accountant', 'Marketing managers'],
 ['Senior Cost Accountant', 'Sales managers'],
 ['Senior Cost Accountant', 'Public relations and fundraising managers'],
 ['Senior Cost Accountant', 'Administrative services managers'],
 ['Senior Cost Accountant', 'Facilities managers'],
 ['Senior Cost Accountant', 'Computer & information systems managers'],
 ['Senior Cost Accountant', 'Financial managers']]

2 žingsnis: Su tikimybe 70% patikrinamas sukurtų profesijų porų sutapimas:

In [44]:
matched = []
for pair in pairs:
    match_ratio = fuzz.partial_ratio(*pair)
    if match_ratio >= 70:
        matched.append(pair)
matched[:10]    
Out[44]:
[['Registered Nurse', 'Registered nurses'],
 ['Administrative Officer', 'Administrative services managers'],
 ['Programmer II', 'Computer programmers'],
 ['Programmer II',
  'Computer numerically controlled tool operators and programmers'],
 ['Pharmacist', 'Pharmacists'],
 ['Pharmacist', 'Pharmacy technicians'],
 ['Pharmacist', 'Pharmacy aides'],
 ['Design Engineer', 'Sales engineers'],
 ['Research Associate',
  'Miscellaneous life, physical, & social science technicians, including social science research assistants'],
 ['Staff Scientist',
  'Environmental scientists and specialists, including health']]
In [45]:
len(matched)
Out[45]:
362

3 žingsnis: iš sutampančių porų sukuriamas DataFrame.

In [46]:
matched_professions = pd.DataFrame(matched, columns=['occupation', 'PUMS Occupation'])
matched_professions.head()
Out[46]:
occupation PUMS Occupation
0 Registered Nurse Registered nurses
1 Administrative Officer Administrative services managers
2 Programmer II Computer programmers
3 Programmer II Computer numerically controlled tool operators...
4 Pharmacist Pharmacists

Gauta lentelė pridedama prie pagrindinės lentelės trečios dalies ("location") ir tikrų profesijų lentelės ("usa_professions"):

In [47]:
alien_occupation_and_power = location[['occupation']]\
                             .merge(matched_professions, on='occupation', how='left')\
                             .merge(usa_professions, on='PUMS Occupation', how='left').dropna()
alien_occupation_and_power.head()
Out[47]:
occupation PUMS Occupation power_coefficient
2 Registered Nurse Registered nurses 1.0
4 Administrative Officer Administrative services managers 1.0
6 Programmer II Computer programmers 1.0
7 Programmer II Computer numerically controlled tool operators... 1.0
8 Pharmacist Pharmacists 2.0

Paimtas sutampančių porų vienodų reikšmių vidurkis (dėl atlikto anksčiau left join'o), ir sukuriama pivotuota lentelė iš dviejų stulpelių. Dabar ateivių profesijos turi nuosavus įtakos koeficientus:

In [48]:
alien_power = alien_occupation_and_power.groupby('occupation')['power_coefficient'].mean().reset_index()
alien_power.head()
Out[48]:
occupation power_coefficient
0 Account Coordinator 1.0
1 Accountant I 1.0
2 Accountant II 1.0
3 Accountant III 1.0
4 Accountant IV 1.0

Galima pamatyti, kaip pasiskirstė įtakos koeficientai ir kodėl taip:

In [49]:
graph = sns.scatterplot(x='occupation', y='power_coefficient', data=alien_power, color='#844593')
graph.set(xticklabels=[])
plt.show()
No description has been provided for this image
In [50]:
alien_power.describe()
Out[50]:
power_coefficient
count 117.000000
mean 1.109285
std 0.504047
min 0.000000
25% 1.000000
50% 1.000000
75% 1.250000
max 3.000000

Tada atsakymą į klausimą galima užrašyti taip:

In [51]:
print(f"Alien power varies from {round(alien_power['power_coefficient'].mean() - alien_power['power_coefficient'].std())} \
to {round(alien_power['power_coefficient'].mean() + alien_power['power_coefficient'].std())}")
Alien power varies from 1 to 2

Tuomet, išvada N4 yra tokia: ateivių profesinė veikla nedaro individams arba visuomenei akivaizdžios neigiamos įtakos, kadangi jos stiprumas yra žemas: nuo 1 iki 2. Ir maksimali reikšmė buvo tiktai 3.

(Be to, jų įtaka gali būti teigiama, bet įtakos krypties nustatymui duomenų rinkinyje nėra).

Tokiu būdu, ketvirtas hipotezės punktas irgi pilnai pasitvirtino.

Galutinė išvada:¶

Išnagrinėjus visus iškeltos hipotezės punktus, buvo nustatyta, kad ateiviai gyvena 51 Amerikos valstijoje ir pasirinko gyvenimo vietą taip, kad ji atitiktų rūšies poreikius. Ir ateivių koncentracija valstijose yra labai maža tikrų piliečių atžvilgių, ir net visų amerikiečių atžvilgių. Ir, nors tarp ateivių yra tam tikras procentas plėšrių rūšių, niekam iš jų nepatinka maitintis žmogiena. Jie gyvena ramiai, turi darbus, kurių įtakos koeficientas irgi yra žemas: nuo 1 iki 2.

Iš viso pasakyto aukščiau, galima teigti, kad ateiviai nekelia grėsmės Amerikos ir visuomenės ateities gerovei, analizės tikslas pasiektas, o pagrindinė hipotezė yra patvirtinta.